﻿/*
7-32 说反话-加强版 (20 分)
给定一句英语，要求你编写程序，将句中所有单词的顺序颠倒输出。

输入格式：
测试输入包含一个测试用例，在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成，其中单词是由英文字母（大小写有区分）组成的字符串，单词之间用若干个空格分开。

输出格式：
每个测试用例的输出占一行，输出倒序后的句子，并且保证单词间只有1个空格。

输入样例：
Hello World   Here I Come
输出样例：
Come I Here World Hello
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void read_line(char* a) {
	int n = 0;
	int readding = 1;
	char c;
	while (readding && scanf("%c",&c) != EOF) {
		switch (c) {
		case '\r':
		case '\n':
			readding = 0;
			break;
		default:
			a[n++] = c;
		}
	}
	a[n] = 0;
}

const int MaxSize = 500001;
char pool[MaxSize] = {};
char* words[MaxSize] = {};

static void scan_words(char* pool, char** words, int* n) {
	int count = 0;
	*n = 0;
	while (*pool) {
		if (*pool == ' ')
		{
			*pool = NULL;
			count = 0;
		}
		else {
			if (count == 0)
				words[(*n)++] = pool;
			count++;
		}
		pool++;
	}
}

static void reverse_dump(char** words, int n) {
	for (int i = n - 1; i > 0; i--)
		printf("%s ", *(words + i));
	printf("%s", words[0]);
}

int main() {
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/zju_C_Basic/data/7.32.txt", "r", stdin);
	int n=0;
	read_line(pool);
	scan_words(pool, words, &n);
	if (n > 0)
		reverse_dump(words, n);
	else
		printf("\n");
	return 0;
}